<?php
class UAC
{
	
	/**
	 * 最后一次的错误消息
	 *
	 * @var string
	 */
	private static $_message = "";
	
	/**
	 * 使用用户名和密码登陆
	 *
	 * @param string $username  用户名
	 * @param string $password  密码
	 * @param int $cookietime	保存登陆到cookie的时间(天). 0为不保存
	 * 
	 * @return bool 
	 */
	public static function loginByUsername($username, $password,$cookietime = 0){
		//清空错误信息
		self::$_message = "";
		
		$password_md5 = md5($password);

		//检查用户名
		$userInfo = M("User")->selectRow("*","where `username` = '$username'");

		if(empty($userInfo)){
			self::$_message = "用户名错误";
			return false;
		}
		
		//检查密码
		if($userInfo['password'] != $password_md5){
			self::$_message = "密码错误";
			return false;
		} else {
			//如果密码验证通过，则用明文密码替换md5密码，用与保存cookie
			$userInfo['password'] = $password;
		}
		
		//读取用户权限
		$userInfo['privileges'] = M("UserPrivilege")->getPrivilege($userInfo['uid'],$userInfo['groupid']);
		//保存用户资料到session & cookie
		self::_saveUserInfo($userInfo,$cookietime);
		
		return true;
	}
	/**
	 * 通过cookie登陆
	 * @return unknown
	 */
	public static function loginByCookie(){
		$user = Helper_Cookie::get('UAC');
		$user = _decode($user);
		if(!empty($user)){
			return self::loginByUsername($user['username'],$user['password']);
		} else {
			return false;
		}
	}
	/**
	 * 保存用户的登录信息到cookie
	 * @param array $userInfo
	 * @param int $cookietime (单位：天)
	 */
	private function _saveUserInfo($userInfo,$cookietime){
		//提取保存cookie必须的登陆资料
		$cookie['name'] = $userInfo['name'];
		$cookie['password'] = $userInfo['password'];
		$auth = _encode($cookie);

		//不用保存明文密码到session
		unset($userInfo['password']);
		
		//保存登陆信息到session
		$_SESSION['UAC'] = $userInfo;
		
		//保存cookie
		if( $cookietime  > 0 ){
			Helper_Cookie::set('UAC',$auth,$cookietime*24*3600);
		}
	}
	/**
	 * 获取已登录的用户的信息
	 * @param string $var 如果为空，则返回全部信息，如果为某个字段名，则返回指定的字段名
	 * 
	 * @return array 用户已登陆则返回用户信息，否则返回array()
	 */
	public static function getUserInfo($var = null){
		if(isset($_SESSION['UAC']) && !empty($_SESSION['UAC'])){
			$ret = $_SESSION['UAC'];
		} else {
			$ret = array();
		}
		if($var == null){
			return $ret;
		} else {
			return $ret[$var];
		}
	}

	/**
	 * 用户是否登陆
	 * @return unknown
	 */
	public static function isLogin(){
		return !empty($_SESSION['UAC']);	
	}
	
	/**
	 * 登出系统
	 */
	public static function logout(){
		unset($_SESSION['UAC']);
		session_destroy();
		return;
	}
	/**
	 * 返回最后一次的错误消息
	 *
	 * @return string
	 */
	public function getMessage(){
		return self::$_message;
	}

	/**
	 * 检查用户是否具有进行某项操作的某个权限
	 *
	 * @param string $privName
	 * @return bool
	 */
	public static function isAuth($privName){
		
		
		if(!self::isLogin()){
			header("Location:" . _url("AdminLogin"));	
		}
		
		if(!isset($_SESSION['UAC']['privileges'])) {
			return false;
		}
		
		$privileges = $_SESSION['UAC']['privileges'];
		
		if (in_array("is_admin",$privileges)) {
			return true;
		} else if (in_array($privName,$privileges)) {
			return true;
		} else {
			return false;
		}
	}
}